package models;



import java.util.Date;
import java.util.Vector;

import stores.Dao_Odontologos;
import stores.Dao_Pacientes;
import stores.Dao_Turnos;

public class Sistema {
	
	private Dao_Odontologos dbOdontologos;
	private Paciente pacienteActual;
	private Odontologo odontologoActual;
	private static Sistema instancia;
	private Dao_Pacientes dbPacientes;
	private Dao_Turnos dbTurnos;
	private Sistema() {
		super();
		dbOdontologos=new Dao_Odontologos();
		dbPacientes= new Dao_Pacientes();
		dbTurnos= new Dao_Turnos();
	}
	
	public Odontologo getOdontologoActual(){
		return this.odontologoActual;
	}


	public static Sistema getInstancia()
	{
		if (instancia == null)
		{
			instancia = new Sistema();
		}
		return instancia;
	}
	
	
	public boolean crearOdontologo(String matricula, String nombre, String apellido)
	{
		boolean validar=true;
		odontologoActual = new Odontologo(matricula,nombre,apellido);
		return (dbOdontologos.insertarOdontologo(odontologoActual,validar) == true);
	}
	
	public boolean crearAgenda(Date date, Date date2)
	{
		return odontologoActual.crearAgenda(date, date2);
	}
	
	public boolean crearPaciente(int dni, String nombre, String apellido, int telefono, Obra_Social ooss){
		pacienteActual = new Paciente(dni,nombre,apellido,telefono,ooss, 0);	
		return ((dbPacientes.insertarPacienteNuevo(pacienteActual)));
	}

	public Vector<Odontologo> getOdontologos() {
		
		return dbOdontologos.getOdontologos();
	}

	public void setOdontologoActual(String matricula) {
		odontologoActual=dbOdontologos.getOdontologoPorMatricula(matricula);
	}

	public Vector<Dia_Semana> getDiasSemana() {
	
		return odontologoActual.getDiasSemana();
	}

	public void actualizarConfiguracionDia(Dia_Semana diaActual) {
		odontologoActual.actualizarConfiguracionDia(diaActual);
		
	}

	public  Vector<Paciente> buscarPacientePorNombreOApellido(String nombre, String apellido) {
		
		return  (dbPacientes.buscarPacientePorNombreOApellido(nombre, apellido));
	}

	public Paciente buscarPacientePorDni(int dni) {
		
		return dbPacientes.buscarPacientePorDni(dni);
	}

	public void setPacienteActual(Paciente seleccionado) {
		this.pacienteActual= seleccionado;
		
	}

	public Vector<Agenda> getAgendas() {
		// TODO Auto-generated method stub
		return odontologoActual.getAgendas();
	}

	public Vector<Turno> getTurnos(Date fecha) {
		return dbTurnos.getTurnos (fecha,  odontologoActual);
		
	}

	public boolean asignarTurno(Turno asignado) {
		return dbTurnos.asignarTurno(asignado, pacienteActual, odontologoActual);
		
	}



	public Vector<Turno> getTurnosDelPacienteActual() {
		
		return dbTurnos.getTurnos(pacienteActual) ;
	}

	public boolean cancelarTurno(Turno cancelado) {
		return dbTurnos.cancelarTurno (cancelado, odontologoActual, pacienteActual);
		
	}

	
}
